/***********************************************************************************
 * 文件名： mcu.h
 * 版本： 1
 * 说明：
 * 		SC8 驱动支持包总头文件。包含了其它外设驱动的头文件。 Mcu_Init 将按照配置文件
 *  初始化MCU时钟和中断使能状态。提供的其它 API 请参见本文件中的说明。
 * 修改记录：
 * 	2021/04/28: 初版。 刘言。
***********************************************************************************/
#ifndef _MCU_H_
#define _MCU_H_

#include <sc.h>         // 官方提供的MCU型号头文件
#include "typedef.h"
#include "..\..\..\projects\prj\bsp\sc8_driver_config.h"   // MCU驱动配置文件
#include "function_define.h"        // 一些操作MCU的伪函数

#include <stdlib.h>
#include <assert.h>
#include <stdio.h>
#include <string.h>
#include <math.h>

// 参数检查与计算

#if (MCU_FSYS_SEL == 0)
// FSYS频率 HZ
#define MCU_FSYS    32000
#elif (MCU_FSYS_SEL == 1)
#define MCU_FSYS    (MCU_FOSC*1000000/64)
#elif (MCU_FSYS_SEL == 2)
#define MCU_FSYS    (MCU_FOSC*1000000/32)
#elif (MCU_FSYS_SEL == 3)
#define MCU_FSYS    (MCU_FOSC*1000000/16)
#elif (MCU_FSYS_SEL == 4)
#define MCU_FSYS    (MCU_FOSC*1000000/8)
#elif (MCU_FSYS_SEL == 5)
#define MCU_FSYS    (MCU_FOSC*1000000/4)
#elif (MCU_FSYS_SEL == 6)
#define MCU_FSYS    (MCU_FOSC*1000000/2)
#elif (MCU_FSYS_SEL == 7)
#define MCU_FSYS    (MCU_FOSC*1000000)
#endif

#if (MCU_FSYS_SEL != 5) 
#define _MCU_SET_FSYS   OSCCON = (MCU_FSYS_SEL<<4)
#else
#define _MCU_SET_FSYS
#endif

#ifndef _XTAL_FREQ
	#define _XTAL_FREQ 		MCU_FSYS	// 使用内置延时函数必须定义主频
    //_delay(1000);			//延时1000指令周期(编译器内置函数)
	//__delay_us(400);		//延时400us(编译器内置函数)
	//__delay_ms(2);		//延时2ms(编译器内置函数)
#endif


// MCU时钟和核心外设初始化

#if SC8P_MCU_TYPE == SC8F577x
#define Mcu_Init()  \
{\
    _POWER_ON_DELAY;\
    _MCU_SET_FSYS;\
    INTCON = MCU_INTCON_INIT;\
    PIE1 = MCU_PIE1_INIT;\
    PIE2 = MCU_PIE2_INIT;\
}
#else

#define Mcu_Init()  \
{\
    _POWER_ON_DELAY;\
    _MCU_SET_FSYS;\
    INTCON = MCU_INTCON_INIT;\
    PIE1 = MCU_PIE1_INIT;\
}

#endif

// 运行系统嘀嗒定时器，仅提供给Polsys调用
#if (SYS_TICK_SEL == 0)
#define Mcu_TickStart()     Tim0_Init()
#elif (SYS_TICK_SEL == 2)
#define Mcu_TickStart()     Tim2_Init()
#elif (SYS_TICK_SEL == 100)
#define Mcu_TickStart()     HPwm_Init()
#else
#error "The SYS TICK SEL configuration is incorrect."
#endif

// 开总中断
#define Mcu_EnableInt()     GIE = 1

// 关总中断
#define Mcu_DisableInt()    GIE = 0


#include "mcu_timer.h"      // 这些头文件在这里可能不太合适，暂时没有找到更好的地方
#include "mcu_pwm.h"
#include "mcu_adc.h"
#include "mcu_wdt.h"
#include "mcu_delay.h"
#include "mcu_eeprom.h"

#endif
